This is an evolving analysis of the Electronic Surgical Discharge Dataset
Completion Analysis
Overall Completion Fraction
Patient Searching
Distribution of Common Last Names


Last Name Frequency


Full First Name & Last Name Search
|
Summary
|
Values
|
|
Min
|
1.00
|
|
Quartile.1
|
1.00
|
|
Median
|
1.00
|
|
Quartile.3
|
1.00
|
|
Max
|
10.00
|
|
IQR
|
0.00
|
|
SD
|
0.61
|
|
Mean
|
1.20
|
|
Upper 95% CI
|
2.42
|
|
Lower 95% CI
|
-0.01
|
First Initial & Last Name Search
|
Summary
|
Values
|
|
Min
|
1.00
|
|
Quartile.1
|
1.00
|
|
Median
|
1.00
|
|
Quartile.3
|
1.00
|
|
Max
|
18.00
|
|
IQR
|
0.00
|
|
SD
|
1.23
|
|
Mean
|
1.45
|
|
Upper 95% CI
|
3.90
|
|
Lower 95% CI
|
-1.01
|
Demographic Analysis
Ethnicity
|
Ethnicity
|
Percentage (%)
|
Lower 95% CI
|
Upper 95% CI
|
|
Asian
|
0.03
|
0.00
|
0.48
|
|
Black
|
92.30
|
91.85
|
92.76
|
|
Coloured
|
2.96
|
2.51
|
3.42
|
|
Indian
|
1.49
|
1.05
|
1.95
|
|
Other
|
0.16
|
0.00
|
0.62
|
|
White
|
3.06
|
2.61
|
3.51
|
Sex
|
Gender
|
Percentage (%)
|
Lower 95% CI
|
Upper 95% CI
|
|
Female
|
52.81
|
51.84
|
53.77
|
|
Male
|
47.14
|
46.17
|
48.11
|
|
Other
|
0.05
|
0.00
|
1.02
|
Age Group
|
Age Group
|
Percentage (%)
|
Lower 95% CI
|
Upper 95% CI
|
|
Infant
|
0.28
|
0.00
|
1.27
|
|
Preschool Child
|
0.00
|
0.00
|
0.99
|
|
Child
|
1.48
|
0.49
|
2.46
|
|
Adolescent
|
4.02
|
3.03
|
5.00
|
|
Young Adult
|
6.00
|
5.02
|
6.99
|
|
Adult
|
34.09
|
33.11
|
35.08
|
|
Middle Aged
|
35.87
|
34.88
|
36.85
|
|
Aged
|
14.99
|
14.01
|
15.98
|
|
80+
|
3.28
|
2.29
|
4.26
|
Length of Stay Analysis


7.97% of patient’s were assessed to have outlier length of stays. This was assessed by means of a cutoff of \(1.5*IQR\) below the first and above the third quartile.
Patient length of stay density visualization
3D Map - Drag and dotate to view details
Length of Stay by Age Group
ICD Analysis
|
ICD Chapter
|
Percentage (%)
|
Lower 95% CI
|
Upper 95% CI
|
|
Infectious & Parasitic
|
3.36
|
2.34
|
4.39
|
|
Neoplasms
|
18.67
|
17.66
|
19.71
|
|
Blood & Immune
|
0.48
|
0.00
|
1.51
|
|
Endocrine, etc
|
2.55
|
1.53
|
3.58
|
|
Mental & Behavioural
|
0.23
|
0.00
|
1.27
|
|
Nervous System
|
0.19
|
0.00
|
1.22
|
|
Eye & Adnexa
|
0.05
|
0.00
|
1.09
|
|
Ear & Mastoid
|
0.02
|
0.00
|
1.05
|
|
Circulatory System
|
5.37
|
4.35
|
6.40
|
|
Respiratory System
|
0.47
|
0.00
|
1.50
|
|
Digestive System
|
48.53
|
47.51
|
49.56
|
|
Skin & Subcutaneous
|
5.78
|
4.76
|
6.81
|
|
Musculoskeletal
|
1.15
|
0.13
|
2.18
|
|
Genitourinary System
|
2.96
|
1.94
|
3.99
|
|
Pregnancy
|
1.09
|
0.07
|
2.13
|
|
Perinatal
|
0.02
|
0.00
|
1.05
|
|
Congenital
|
0.45
|
0.00
|
1.48
|
|
Abnormal Findings
|
1.80
|
0.78
|
2.84
|
|
Injury, Poisoning, etc
|
1.00
|
0.00
|
2.03
|
|
Morbidity & Mortality
|
0.15
|
0.00
|
1.18
|
|
Influencing Factors
|
0.90
|
0.00
|
1.93
|
|
Special Purpose
|
0.01
|
0.00
|
1.04
|
|
Neoplasm Morphology
|
4.78
|
3.76
|
5.82
|
Demographic ICD Flow
ICD Chapter Sankey Flow

ICD Code Sankey Flow

LS0tDQp0aXRsZTogIkVEIEFuYWx5c2lzIg0KYXV0aG9yOiAiQnJhZCBTZWdhbCINCmRhdGU6ICI3LzE1LzIwMTkiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgY2FjaGU9VFJVRX0NCnJlcXVpcmUoa25pdHIpDQpyZXF1aXJlKHJlYWR4bCkNCnJlcXVpcmUodGlkeXZlcnNlKQ0KcmVxdWlyZShkcGx5cikNCnJlcXVpcmUoYW9kKQ0KcmVxdWlyZShnZ3Bsb3QyKQ0KcmVxdWlyZShwbG90bHkpDQpyZXF1aXJlKHhsc3gpDQpyZXF1aXJlKERlc2NUb29scykNCnJlcXVpcmUoUHJvcENJcykNCnJlcXVpcmUoZ2dhbGx1dmlhbCkNCnJlcXVpcmUodmNkKQ0KcmVxdWlyZShyZ2wpDQpyZXF1aXJlKHJheXNoYWRlcikNCnJlcXVpcmUobHVicmlkYXRlKQ0KcmVxdWlyZSh6b28pDQpyZXF1aXJlKHJlc2hhcGUyKQ0KcmVxdWlyZShIbWlzYykNCnJlcXVpcmUobWFncml0dHIpDQpyZXF1aXJlKHJnbHdpZGdldCkNCnJlcXVpcmUoaHRtbHRvb2xzKQ0KcmVxdWlyZShybWFya2Rvd24pDQpyZXF1aXJlKGZvcm1hdHRhYmxlKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0Ka25pdHI6OmtuaXRfaG9va3Mkc2V0KHJnbCA9IGhvb2tfcmdsKQ0KDQpFRCA8LQ0KICByZWFkX2V4Y2VsKA0KICAgICJEOi9PbmVEcml2ZS9PbmVEcml2ZS9Eb2N1bWVudHMvTUJCQ2gvUmVzZWFyY2ggUHJvamVjdHMvQklTL0VEL1BhdGllbnQgRXh0cmFjdC1CcmFkLVBDLnhsc3giLA0KICAgIGNvbF90eXBlcyA9IGMoDQogICAgICAibnVtZXJpYyIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAiZGF0ZSIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAibnVtZXJpYyIsDQogICAgICAibnVtZXJpYyIsDQogICAgICAiZGF0ZSINCiAgICApDQogICkNCg0KRGlzY2hhcmdlIDwtDQogIHJlYWRfZXhjZWwoDQogICAgIkQ6L09uZURyaXZlL09uZURyaXZlL0RvY3VtZW50cy9NQkJDaC9SZXNlYXJjaCBQcm9qZWN0cy9CSVMvRUQvRnVsbCBFRCBEYXRhYmFzZS54bHN4IiwNCiAgICBzaGVldCA9ICJEaXNjaGFyZ2VSZWNvcmRzIiwNCiAgICBjb2xfdHlwZXMgPSBjKA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgImRhdGUiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgImRhdGUiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgImRhdGUiLA0KICAgICAgInRleHQiLA0KICAgICAgImRhdGUiLA0KICAgICAgImRhdGUiLA0KICAgICAgInRleHQiDQogICAgKQ0KICApDQpEaWFnbm9zaXMgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIkRpYWdub3NpcyIsDQogICAgY29sX3R5cGVzID0gYygibnVtZXJpYyIsDQogICAgICAgICAgICAgICAgICAibnVtZXJpYyIsICJudW1lcmljIiwgInRleHQiKQ0KICApDQpJQ0QgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIklDRDEwQ29kZSIsDQogICAgY29sX3R5cGVzID0gYygibnVtZXJpYyIsDQogICAgICAgICAgICAgICAgICAibnVtZXJpYyIsICJ0ZXh0IiwgInRleHQiKQ0KICApDQpJQ0RCbG9jayA8LQ0KICByZWFkX2V4Y2VsKA0KICAgICJEOi9PbmVEcml2ZS9PbmVEcml2ZS9Eb2N1bWVudHMvTUJCQ2gvUmVzZWFyY2ggUHJvamVjdHMvQklTL0VEL0Z1bGwgRUQgRGF0YWJhc2UueGxzeCIsDQogICAgc2hlZXQgPSAiSUNEMTBDb2RlQmxvY2siLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgIm51bWVyaWMiLCAidGV4dCIpDQogICkNCklDRENoYXAgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIklDRDEwQ29kZUNoYXB0ZXIiLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgInRleHQiLCAidGV4dCIpDQogICkNCkNvbXBsaWNhdGlvbnMgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIkNvbXBsaWNhdGlvbnMiLA0KICAgIGNvbF90eXBlcyA9IGMoDQogICAgICAibnVtZXJpYyIsDQogICAgICAibnVtZXJpYyIsDQogICAgICAibnVtZXJpYyIsDQogICAgICAiZGF0ZSIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAibnVtZXJpYyINCiAgICApDQogICkNClJhZGlvbG9neSA8LQ0KICByZWFkX2V4Y2VsKA0KICAgICJEOi9PbmVEcml2ZS9PbmVEcml2ZS9Eb2N1bWVudHMvTUJCQ2gvUmVzZWFyY2ggUHJvamVjdHMvQklTL0VEL0Z1bGwgRUQgRGF0YWJhc2UueGxzeCIsDQogICAgc2hlZXQgPSAiUmFkaW9sb2dpZXMiLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgIm51bWVyaWMiLCAidGV4dCIsICJ0ZXh0IiwgImRhdGUiLA0KICAgICAgICAgICAgICAgICAgInRleHQiKQ0KICApDQpNZWRpY2F0aW9uIDwtDQogIHJlYWRfZXhjZWwoDQogICAgIkQ6L09uZURyaXZlL09uZURyaXZlL0RvY3VtZW50cy9NQkJDaC9SZXNlYXJjaCBQcm9qZWN0cy9CSVMvRUQvRnVsbCBFRCBEYXRhYmFzZS54bHN4IiwNCiAgICBzaGVldCA9ICJNZWRpY2F0aW9ucyIsDQogICAgY29sX3R5cGVzID0gYygibnVtZXJpYyIsDQogICAgICAgICAgICAgICAgICAibnVtZXJpYyIsICJ0ZXh0IiwgInRleHQiLCAidGV4dCIsDQogICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IikNCiAgKQ0KSUNVIDwtDQogIHJlYWRfZXhjZWwoDQogICAgIkQ6L09uZURyaXZlL09uZURyaXZlL0RvY3VtZW50cy9NQkJDaC9SZXNlYXJjaCBQcm9qZWN0cy9CSVMvRUQvRnVsbCBFRCBEYXRhYmFzZS54bHN4IiwNCiAgICBzaGVldCA9ICJJQ1VIaWdoQ2FyZXMiLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgIm51bWVyaWMiLCAidGV4dCIsICJkYXRlIiwgImRhdGUiLA0KICAgICAgICAgICAgICAgICAgInRleHQiKQ0KICApDQpQcm9jZWR1cmUgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIlByb2NlZHVyZXMiLA0KICAgIGNvbF90eXBlcyA9IGMoDQogICAgICAibnVtZXJpYyIsDQogICAgICAibnVtZXJpYyIsDQogICAgICAiZGF0ZSIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAibnVtZXJpYyINCiAgICApDQogICkNClByb2NDb2RlcyA8LQ0KICByZWFkX2V4Y2VsKA0KICAgICJEOi9PbmVEcml2ZS9PbmVEcml2ZS9Eb2N1bWVudHMvTUJCQ2gvUmVzZWFyY2ggUHJvamVjdHMvQklTL0VEL0Z1bGwgRUQgRGF0YWJhc2UueGxzeCIsDQogICAgc2hlZXQgPSAiUHJvY2VkdXJlQ29kZXMiLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgIm51bWVyaWMiLCAidGV4dCIsICJ0ZXh0IikNCiAgKQ0KUHJvY0NvZGVUeXBlIDwtDQogIHJlYWRfZXhjZWwoDQogICAgIkQ6L09uZURyaXZlL09uZURyaXZlL0RvY3VtZW50cy9NQkJDaC9SZXNlYXJjaCBQcm9qZWN0cy9CSVMvRUQvRnVsbCBFRCBEYXRhYmFzZS54bHN4IiwNCiAgICBzaGVldCA9ICJQcm9jZWR1cmVDb2RlVHlwZXMiLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgInRleHQiKQ0KICApDQpIaXN0b2xvZ3kgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIkhpc3RvbG9naWVzIiwNCiAgICBjb2xfdHlwZXMgPSBjKCJudW1lcmljIiwNCiAgICAgICAgICAgICAgICAgICJudW1lcmljIiwgImRhdGUiLCAidGV4dCIsICJ0ZXh0IikNCiAgKQ0KDQojIC0tIEZ1bmN0aW9ucyAtLQ0KY29tcGxldGlvbiA8LSBmdW5jdGlvbihpbnB1dCkgew0KICB0ZXN0IDwtIGMoKQ0KICB0ZXN0X2NvdW50IDwtIGMoKQ0KICBmb3IgKHZlYyBpbiAxOmxlbmd0aChpbnB1dCkpIHsNCiAgICB2YXJfY291bnQgPC0gaW5wdXQgJT4lDQogICAgICBmaWx0ZXIoIWlzLm5hKGlucHV0W3ZlY10pIHwgaW5wdXRbdmVjXSAhPSAwKSAlPiUNCiAgICAgIGNvdW50KCkNCiAgICB0ZXN0IDwtIHJiaW5kKHRlc3QsIG5hbWVzKGlucHV0KVt2ZWNdKQ0KICAgIHRlc3RfY291bnQgPC0NCiAgICAgIHJiaW5kKHRlc3RfY291bnQsIHJvdW5kKCh2YXJfY291bnQkbiAvIGNvdW50KGlucHV0KSRuKSwgMikpDQogIH0NCiAgcmV0dXJuKGRhdGEuZnJhbWUodmFyaWFibGUgPSB0ZXN0LCBmcmFjdGlvbiA9IHRlc3RfY291bnQpKQ0KfQ0KDQpEYXRhU3VtbWFyeSA8LSBmdW5jdGlvbihpbnB1dCkgew0KICBmaXZlX251bSA8LSBmaXZlbnVtKGlucHV0KQ0KICBNZWFuIDwtIG1lYW4oaW5wdXQpDQogIFNEIDwtIHNkKGlucHV0KQ0KICB1cHBDSSA8LSBNZWFuICsgMiAqIFNEDQogIGxvd0NJIDwtIE1lYW4gLSAyICogU0QNCiAgb3V0cHV0IDwtDQogICAgZGF0YS5mcmFtZSgNCiAgICAgIE1pbiA9IGZpdmVfbnVtWzFdLA0KICAgICAgIlF1YXJ0aWxlIDEiID0gZml2ZV9udW1bMl0sDQogICAgICBNZWRpYW4gPSBmaXZlX251bVszXSwNCiAgICAgICJRdWFydGlsZSAzIiA9IGZpdmVfbnVtWzRdLA0KICAgICAgTWF4ID0gZml2ZV9udW1bNV0sDQogICAgICBJUVIgPSBmaXZlX251bVs0XSAtIGZpdmVfbnVtWzJdLA0KICAgICAgU0QsDQogICAgICBNZWFuLA0KICAgICAgJ1VwcGVyLkNJJyA9IHVwcENJLA0KICAgICAgJ0xvd2VyLkNJJyA9IGxvd0NJDQogICAgKQ0KICByZXR1cm4ob3V0cHV0KQ0KfQ0KDQptb250aF9jb21wIDwtIGZ1bmN0aW9uKGlucHV0KSB7DQogIGNvbXAgPC0gTlVMTA0KICBmb3IgKGsgaW4gMToxMikgew0KICAgIG1vbnRoIDwtIE1lcmdlZElDRCAlPiUNCiAgICAgIGZpbHRlcihhcy5udW1lcmljKGZvcm1hdChNZXJnZWRJQ0QkRW5yb2wsICclWScpKSA9PSBpbnB1dCwgYXMubnVtZXJpYyhmb3JtYXQoTWVyZ2VkSUNEJEVucm9sLCAnJW0nKSkgPT0gaykNCiAgICAjIHByaW50KG5yb3cobW9udGgpKQ0KICAgIGlmIChucm93KG1vbnRoKSA9PSAwKSB7DQogICAgICBtb250aCA8LSBjb21wbGV0aW9uKG1vbnRoKQ0KICAgICAgbW9udGggPC0gbXV0YXRlKG1vbnRoLCBmcmFjdGlvbiA9IDAuMCkNCiAgICB9IGVsc2V7DQogICAgICBtb250aCA8LSBjb21wbGV0aW9uKG1vbnRoKQ0KICAgIH0NCiAgICBtb250aCA8LSBtb250aCAlPiUNCiAgICAgIHJlbmFtZSghIXBhc3RlKGspIDo9IGZyYWN0aW9uKSAjTmV3IGV4cHJlc3Npb24gZW5hYmxlcyBuYW1pbmcgb2YgYSB2YXJpYWJsZSBieSBhIHN0cmluZw0KICAgIGlmIChrID09IDEpIHsNCiAgICAgIGNvbXAgPC0gbW9udGgNCiAgICB9IGVsc2V7DQogICAgICBjb21wIDwtIGxlZnRfam9pbihjb21wLCBtb250aCkNCiAgICB9DQogICAgI3ByaW50KGNvbXApDQogIH0NCiAgY29tcCA8LSBjb2x1bW5fdG9fcm93bmFtZXMoY29tcCwgdmFyID0gInZhcmlhYmxlIikNCiAgcmV0dXJuKGNvbXApDQp9DQoNCiNDYWxjdWxhdGUgOTUlIENJcyBmcm9tIEV0aG5pY2l0aWVzIOKGkiBFeHRyYWN0cyBWYXJpYWJsZXMgJiBUaXRsZXMgZnJvbSBUYWJsZSBTdW1tYXJ5DQojSW5wdXQgaXMgQXJyYXkgRmlsdGVyZWQgb24gRmllbGQgb2YgSW50ZXJlc3QNCk11bHRpX0NJIDwtIGZ1bmN0aW9uKGlucHV0KSB7DQogIENJIDwtIGRhdGEuZnJhbWUoRmllbGRzID0gbmFtZXModGFibGUoaW5wdXQpKSwNCiAgICAgICAgICAgICBNdWx0aW5vbUNJKA0KICAgICAgICAgICAgICAgYXMudmVjdG9yKHRhYmxlKGlucHV0KSksDQogICAgICAgICAgICAgICBjb25mLmxldmVsID0gMC45NSwNCiAgICAgICAgICAgICAgIG1ldGhvZCA9ICJzaXNvbmdsYXoiDQogICAgICAgICAgICAgKSkNCiAgQ0kkZXN0IDwtIHJvdW5kKENJJGVzdCoxMDAsIDIpDQogIENJJGx3ci5jaSA8LSByb3VuZChDSSRsd3IuY2kqMTAwLCAyKQ0KICBDSSR1cHIuY2kgPC0gcm91bmQoQ0kkdXByLmNpKjEwMCwgMikNCiAgQ0kgPC1DSSAlPiUNCiAgICByZW5hbWUoIlBlcmNlbnRhZ2UgKCUpIiA9ICJlc3QiLCAiTG93ZXIgOTUlIENJIiA9IGx3ci5jaSwgIlVwcGVyIDk1JSBDSSIgPSB1cHIuY2kpDQogIHJldHVybihDSSkNCn0NCg0KDQphZ2VfZ3JvdXBzIDwtIGZ1bmN0aW9uKGlucHV0KSB7DQogIGdyb3VwIDwtICIiDQogIGlmIChpbnB1dCA8IDIpIHsNCiAgICBncm91cCA8LSAiSW5mYW50Ig0KICB9DQogIGlmIChpbnB1dCA+PSAyICYmIGlucHV0IDwgNikgew0KICAgIGdyb3VwIDwtICJQcmVzY2hvb2wgQ2hpbGQiDQogIH0NCiAgaWYgKGlucHV0ID49IDYgJiYgaW5wdXQgPCAxMykgew0KICAgIGdyb3VwIDwtICJDaGlsZCINCiAgfQ0KICBpZiAoaW5wdXQgPj0gMTMgJiYgaW5wdXQgPCAxOSkgew0KICAgIGdyb3VwIDwtICJBZG9sZXNjZW50Ig0KICB9DQogIGlmIChpbnB1dCA+PSAxOSAmJiBpbnB1dCA8IDI1KSB7DQogICAgZ3JvdXAgPC0gIllvdW5nIEFkdWx0Ig0KICB9DQogIGlmIChpbnB1dCA+PSAyNSAmJiBpbnB1dCA8IDQ1KSB7DQogICAgZ3JvdXAgPC0gIkFkdWx0Ig0KICB9DQogIGlmIChpbnB1dCA+PSA0NSAmJiBpbnB1dCA8IDY1KSB7DQogICAgZ3JvdXAgPC0gIk1pZGRsZSBBZ2VkIg0KICB9DQogIGlmIChpbnB1dCA+PSA2NSAmJiBpbnB1dCA8IDgwKSB7DQogICAgZ3JvdXAgPC0gIkFnZWQiDQogIH0NCiAgaWYgKGlucHV0ID49IDgwKSB7DQogICAgZ3JvdXAgPC0gIjgwKyINCiAgfQ0KICByZXR1cm4oZ3JvdXApDQp9DQoNCmFnZV9saXN0IDwtIGMoDQogICJJbmZhbnQiLA0KICAiUHJlc2Nob29sIENoaWxkIiwNCiAgIkNoaWxkIiwNCiAgIkFkb2xlc2NlbnQiLA0KICAiWW91bmcgQWR1bHQiLA0KICAiQWR1bHQiLA0KICAiTWlkZGxlIEFnZWQiLA0KICAiQWdlZCIsDQogICI4MCsiDQopDQoNCm91dGxpZXJUZXN0IDwtIGZ1bmN0aW9uKHZhbElucHV0LCBzdW1tYXJ5SW5wdXQpIHsNCiAgb3V0bGllciA8LSBjKCkNCiAgZm9yICh2ZWMgaW4gdmFsSW5wdXQpIHsNCiAgICBpZiAodmVjID4gKHN1bW1hcnlJbnB1dCRRdWFydGlsZS4zICsgMS41ICogc3VtbWFyeUlucHV0JElRUikgfA0KICAgICAgICB2ZWMgPCAoc3VtbWFyeUlucHV0JFF1YXJ0aWxlLjEgLSAxLjUgKiBzdW1tYXJ5SW5wdXQkSVFSKSkgew0KICAgICAgb3V0bGllciA8LSByYmluZChvdXRsaWVyLCBUUlVFKQ0KICAgIH0gZWxzZXsNCiAgICAgIG91dGxpZXIgPC0gcmJpbmQob3V0bGllciwgRkFMU0UpDQogICAgfQ0KICB9DQogIHJldHVybihvdXRsaWVyKQ0KfQ0KDQpTdW1tYXJ5X1RhYmxlIDwtIGZ1bmN0aW9uKGlucHV0KXsNCiAgZnVsbF9zdW0gPC0gYXMuZGF0YS5mcmFtZSh0KERhdGFTdW1tYXJ5KGlucHV0KSkpICU+JQ0KICAgIHJlbmFtZShWYWx1ZXMgPSBWMSkgJT4lDQogICAgcm91bmQoMikgJT4lDQogICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJTdW1tYXJ5IikgDQogIGZ1bGxfc3VtWzksMV0gPC0gIlVwcGVyIDk1JSBDSSINCiAgZnVsbF9zdW1bMTAsMV0gPC0gIkxvd2VyIDk1JSBDSSINCiAgDQogIGZvcm1hdHRhYmxlKA0KICAgIGZ1bGxfc3VtLA0KICAgIGFsaWduID0gYygibCIsIHJlcCgiciIsIE5DT0woZnVsbF9zdW0pIC0gMSkpLA0KICAgIGxpc3QoDQogICAgICAiU3VtbWFyeSIgPSBmb3JtYXR0ZXIoInNwYW4iLCBzdHlsZSA9IH4gc3R5bGUoDQogICAgICAgIGNvbG9yID0gIkdyZXkiLCBmb250LndlaWdodCA9ICJib2xkIg0KICAgICAgKSksIGBWYWx1ZXNgID0gY29sb3JfdGlsZSgiI2FjZGVlZiIsICIjYmZmZmZmIikNCiAgICApDQogICkNCn0NCg0KZ3JlZW5fbWluIDwtICIjZTdmZmVlIg0KZ3JlZW5fbWF4IDwtICIjNGFiNzZjIg0KYGBgDQojIyMjIFRoaXMgaXMgYW4gZXZvbHZpbmcgYW5hbHlzaXMgb2YgdGhlIEVsZWN0cm9uaWMgU3VyZ2ljYWwgRGlzY2hhcmdlIERhdGFzZXQNCg0KIyMgQ29tcGxldGlvbiBBbmFseXNpcw0KYGBge3IgRUQsIGVjaG89RkFMU0V9DQpFRCA8LSAgRUQgJT4lDQogIHJvd3dpc2UoKSAlPiUNCiAgbXV0YXRlKEFnZV9Hcm91cCA9IGFnZV9ncm91cHMoYWdlKSkNCg0KRUQkQWdlX0dyb3VwIDwtIG9yZGVyZWQoDQogIEVEJEFnZV9Hcm91cCwNCiAgbGV2ZWxzID0gYWdlX2xpc3QNCikNCnN1cHByZXNzTWVzc2FnZXMoDQpNZXJnZWRJQ0QgPC0gbGVmdF9qb2luKHggPSBEaXNjaGFyZ2UsIHkgPSBEaWFnbm9zaXMpICU+JQ0KICBsZWZ0X2pvaW4oeCA9IC4sIHkgPSBJQ0QpICU+JQ0KICBsZWZ0X2pvaW4oeCA9IC4sIHkgPSBJQ0RCbG9jaykgJT4lDQogIGxlZnRfam9pbih4ID0gLiwgeSA9IElDRENoYXApICU+JQ0KICBsZWZ0X2pvaW4oeCA9IC4sIHkgPSBFRCkNCikNCg0KY291bnRfdGFibGUgPC0gY29tcGxldGlvbihNZXJnZWRJQ0QpDQoNCmNvbXBsZXRpb25fcGxvdCA8LQ0KICBnZ3Bsb3QoZGF0YSA9IGNvdW50X3RhYmxlKSArIGdlb21fY29sKG1hcHBpbmcgPSBhZXMoeCA9IHZhcmlhYmxlLCB5ID0gZnJhY3Rpb24pLCBmaWxsID0gJ2RvZGdlcmJsdWUnKSArDQogIGxhYnModGl0bGUgPSAiUmVjb3JkIENvbXBsZXRpb24gRnJhY3Rpb24iLCB4ID0gIlJlY29yZHMiLCB5ID0gIkNvbXBsZXRpb24gRnJhY3Rpb24iKSArIGNvb3JkX2ZsaXAoKSArIHRoZW1lKHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpKQ0KYGBgDQojIyMgT3ZlcmFsbCBDb21wbGV0aW9uIEZyYWN0aW9uDQpgciBnZ3Bsb3RseShjb21wbGV0aW9uX3Bsb3QsIGhlaWdodCA9IDEwMDApYA0KDQojIyBQYXRpZW50IFNlYXJjaGluZw0KIyMjIERpc3RyaWJ1dGlvbiBvZiBDb21tb24gTGFzdCBOYW1lcw0KYGBge3IgU2VhcmNoLCBlY2hvPUZBTFNFLCBmaWcuYWxpZ24gPSAiY2VudGVyIn0NCkxhc3RfQ291bnQgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShFRCRsYXN0TmFtZSkpDQoNCkxhc3RfQm94IDwtIExhc3RfQ291bnQgJT4lDQogIGZpbHRlcihGcmVxID4gMTApICU+JQ0KICBzZWxlY3QoRnJlcSkgJT4lDQogIGJveHBsb3QoDQogICAgLiwNCiAgICBtYWluID0gIkRpc3RyaWJ1dGlvbiBvZiBMYXN0IE5hbWVzIGFwcGVhcmluZyBtb3JlIHRoYW4gMTAgdGltZXMgaW4gRUQiLA0KICAgIHhsYWIgPSAiRnJlcXVlbmN5IiwNCiAgICB5bGFiID0gIkxhc3QgTmFtZXMiLA0KICAgIGNvbCA9ICJyZWQiLA0KICAgIGJvcmRlciA9ICJibGFjayIsDQogICAgaG9yaXpvbnRhbCA9IFRSVUUsDQogICAgbm90Y2ggPSBGQUxTRQ0KICApDQoNCkxhc3RfU3RyaXAgPC1MYXN0X0NvdW50ICU+JQ0KICBmaWx0ZXIoRnJlcSA+IDEwKSAlPiUNCiAgc2VsZWN0KEZyZXEpICU+JQ0KICBzdHJpcGNoYXJ0KA0KICAgIC4sDQogICAgeGxhYiA9ICJGcmVxdWVuY3kiLA0KICAgIHlsYWIgPSAiTGFzdCBOYW1lcyIsDQogICAgbWV0aG9kID0gImppdHRlciIsDQogICAgY29sID0gImJsYWNrIg0KICApDQpgYGANCiMjIyBMYXN0IE5hbWUgRnJlcXVlbmN5DQpgYGB7ciBTZWFyY2ggMiwgZWNobz1GQUxTRSwgZmlnLmFsaWduID0gImNlbnRlciJ9DQoNCmhpc3QoTGFzdF9Db3VudCRGcmVxLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBMYXN0IE5hbWVzIiwgeGxhYiA9ICJMYXN0IE5hbWUgT2NjdXJlbmNlIikNCg0KTGFzdF9Db3VudCRGcmVxICU+JQ0KICB0YWJsZSgpICU+JQ0KICBhcy52ZWN0b3IoKSAlPiUNCiAgY3Vtc3VtKCkgJT4lDQogIGJhcnBsb3QoKQ0KYGBgDQoNCmBgYHtyIFNlYXJjaCAzLCBlY2hvPUZBTFNFfQ0KI0dyb3VwaW5nIGJ5IEZ1bGwgU3VybmFtZSAmIEZ1bGwgTmFtZQ0KY291bnRfbmFtZXMgIDwtIEVEICU+JQ0KICB1bmdyb3VwKCkgJT4lDQogIGdyb3VwX2J5KGxhc3ROYW1lLCBmaXJzdE5hbWUpICU+JQ0KICBjb3VudCgpICU+JQ0KICByZW5hbWUoQ291bnQgPSBuKQ0KDQojR3JvdXBpbmcgYnkgRnVsbCBTdXJuYW1lICYgRmlyc3QgSW5pdGlhbA0KY291bnRfaW5pdGlhbCA8LSBFRCAlPiUNCiAgbXV0YXRlKGluaXRpYWxzID0gc3Vic3RyKGZpcnN0TmFtZSwgc3RhcnQgPSAxLCBzdG9wID0gMSkpICU+JQ0KICB1bmdyb3VwKCkgJT4lDQogIGdyb3VwX2J5KGxhc3ROYW1lLCBpbml0aWFscykgJT4lDQogIGNvdW50KCkgJT4lDQogIHJlbmFtZShDb3VudCA9IG4pDQoNCmZ1bGxfdGFiIDwtIFN1bW1hcnlfVGFibGUoY291bnRfbmFtZXMkQ291bnQpDQppbml0aWFsX3RhYiA8LSBTdW1tYXJ5X1RhYmxlKGNvdW50X2luaXRpYWwkQ291bnQpDQpgYGANCiMjIyBGdWxsIEZpcnN0IE5hbWUgJiBMYXN0IE5hbWUgU2VhcmNoDQpgciBmdWxsX3RhYmANCiMjIyBGaXJzdCBJbml0aWFsICYgTGFzdCBOYW1lIFNlYXJjaA0KYHIgaW5pdGlhbF90YWJgDQoNCiMjIERlbW9ncmFwaGljIEFuYWx5c2lzDQpgYGB7ciBEZW1vZ3JhcGhpYywgZWNobz1GQUxTRX0NCiNEZW1vZ3JhcGhpYyBHcm91cGluZw0KRXRobmljaXR5X0JhciA8LSAgDQogIGdncGxvdChFRCwgYWVzKHggPSBldGhuaWNpdHkpKSArIGdlb21fYmFyKGZpbGwgPSAncmVkJykgKyBnZW9tX3RleHQoDQogICAgc3RhdCA9ICdjb3VudCcsDQogICAgYWVzKGxhYmVsID0gLi5jb3VudC4uKSwNCiAgICB2anVzdCA9IC0wLjMsDQogICAgc2l6ZSA9IDMuNQ0KICApICsNCiAgbGFicygNCiAgICB0aXRsZSA9IHBhc3RlKA0KICAgICAgIkRpc3RyaWJ1dGlvbiBvZiBFdGhuaWNpdGllcyBpbiBFRCAobiA9ICIsDQogICAgICBucm93KEVEKSwNCiAgICAgICIpIiwNCiAgICAgIHNlcCA9ICIiDQogICAgKSwNCiAgICB5ID0gIkNvdW50IiwNCiAgICB4ID0gIkV0aG5pY2l0aWVzIg0KICApICsgdGhlbWUoDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikNCiAgKQ0KDQpHZW5kZXJfQmFyIDwtDQogIGdncGxvdChFRCwgYWVzKHggPSBnZW5kZXIpKSArIGdlb21fYmFyKGZpbGwgPSAncmVkJykgKyBnZW9tX3RleHQoDQogICAgc3RhdCA9ICdjb3VudCcsDQogICAgYWVzKGxhYmVsID0gLi5jb3VudC4uKSwNCiAgICB2anVzdCA9IC0wLjMsDQogICAgc2l6ZSA9IDMuNQ0KICApICsNCiAgbGFicygNCiAgICB0aXRsZSA9IHBhc3RlKA0KICAgICAgIkRpc3RyaWJ1dGlvbiBvZiBTZXggaW4gRUQgKG4gPSAiLA0KICAgICAgbnJvdyhFRCksDQogICAgICAiKSIsDQogICAgICBzZXAgPSAiIg0KICAgICksDQogICAgeSA9ICJDb3VudCIsDQogICAgeCA9ICJTZXgiDQogICkgKyB0aGVtZSgNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKQ0KICApDQoNCkV0aG5pY2l0eV9HZW5kZXIgPC0gZ2dwbG90KEVELCBhZXMoeCA9IGV0aG5pY2l0eSwgZmlsbCA9IGdlbmRlcikpICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZG9kZ2UiKSArDQogICAgbGFicygNCiAgICAgIHRpdGxlID0gIkV0aG5pY2l0eSAmIEdlbmRlciBEaXZpc2lvbnMiLA0KICAgICAgeCA9ICJFdGhuaWNpdGllcyIsDQogICAgICB5ID0gIkNvdW50IiwNCiAgICAgIGZpbGwgPSAiR2VuZGVyIg0KKSsgdGhlbWUoDQogIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpDQopDQoNCkFnZV9CYXIgPC0NCiAgZ2dwbG90KEVELCBhZXMoeCA9IEFnZV9Hcm91cCkpICsgZ2VvbV9iYXIoZmlsbCA9ICdyZWQnKSArIGdlb21fdGV4dCgNCiAgICBzdGF0ID0gJ2NvdW50JywNCiAgICBhZXMobGFiZWwgPSAuLmNvdW50Li4pLA0KICAgIHZqdXN0ID0gLTAuMywNCiAgICBzaXplID0gMy41DQogICkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gcGFzdGUoDQogICAgICAiRGlzdHJpYnV0aW9uIG9mIEFnZSBHcm91cHMgaW4gRUQgKG4gPSAiLA0KICAgICAgbnJvdyhFRCksDQogICAgICAiKSIsDQogICAgICBzZXAgPSAiIg0KICAgICksDQogICAgeSA9ICJDb3VudCIsDQogICAgeCA9ICJBZ2UgR3JvdXBzIg0KICApICsgdGhlbWUoDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikNCiAgKSArIGNvb3JkX2ZsaXAoKQ0KDQpSYWNlX0NJIDwtIE11bHRpX0NJKEVEJGV0aG5pY2l0eSkgJT4lDQogIHJlbmFtZSgiRXRobmljaXR5IiA9IEZpZWxkcykNClJhY2VfVGFiIDwtIGZvcm1hdHRhYmxlKA0KICBSYWNlX0NJLA0KICBhbGlnbiA9IGMoImwiLCByZXAoInIiLCBOQ09MKFJhY2VfQ0kpIC0gMSkpLA0KICBsaXN0KA0KICAgICJFdGhuaWNpdHkiID0gZm9ybWF0dGVyKCJzcGFuIiwgc3R5bGUgPSB+IHN0eWxlKA0KICAgICAgY29sb3IgPSAiR3JleSIsIGZvbnQud2VpZ2h0ID0gImJvbGQiDQogICAgKSksDQogICAgIlBlcmNlbnRhZ2UgKCUpIiA9IGNvbG9yX3RpbGUoZ3JlZW5fbWluLCBncmVlbl9tYXgpDQogICkNCikNCg0KR2VuZGVyX0NJIDwtIE11bHRpX0NJKEVEJGdlbmRlcikgJT4lDQogIHJlbmFtZSgiR2VuZGVyIiA9IEZpZWxkcykNCkdlbmRlcl9UYWIgPC0gZm9ybWF0dGFibGUoDQogIEdlbmRlcl9DSSwNCiAgYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgTkNPTChHZW5kZXJfQ0kpIC0gMSkpLA0KICBsaXN0KA0KICAgICJHZW5kZXIiID0gZm9ybWF0dGVyKCJzcGFuIiwgc3R5bGUgPSB+IHN0eWxlKA0KICAgICAgY29sb3IgPSAiR3JleSIsIGZvbnQud2VpZ2h0ID0gImJvbGQiDQogICAgKSksDQogICAgIlBlcmNlbnRhZ2UgKCUpIiA9IGNvbG9yX3RpbGUoZ3JlZW5fbWluLCBncmVlbl9tYXgpDQogICkNCikNCg0KQWdlX0NJIDwtIE11bHRpX0NJKEVEJEFnZV9Hcm91cCkgJT4lDQogIHJlbmFtZSgiQWdlIEdyb3VwIiA9IEZpZWxkcykNCkFnZV9UYWIgPC0gZm9ybWF0dGFibGUoDQogIEFnZV9DSSwNCiAgYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgTkNPTChBZ2VfQ0kpIC0gMSkpLA0KICBsaXN0KA0KICAgICJBZ2UgR3JvdXAiID0gZm9ybWF0dGVyKCJzcGFuIiwgc3R5bGUgPSB+IHN0eWxlKA0KICAgICAgY29sb3IgPSAiR3JleSIsIGZvbnQud2VpZ2h0ID0gImJvbGQiDQogICAgKSksDQogICAgIlBlcmNlbnRhZ2UgKCUpIiA9IGNvbG9yX3RpbGUoZ3JlZW5fbWluLCBncmVlbl9tYXgpDQogICkNCikNCmBgYA0KIyMjIEV0aG5pY2l0eSANCmByIGdncGxvdGx5KEV0aG5pY2l0eV9CYXIpYA0KYHIgUmFjZV9UYWJgDQojIyMgU2V4DQpgciBnZ3Bsb3RseShHZW5kZXJfQmFyKWANCmByIEdlbmRlcl9UYWJgIA0KDQpgciBnZ3Bsb3RseShFdGhuaWNpdHlfR2VuZGVyKWANCg0KIyMjIEFnZSBHcm91cA0KYHIgZ2dwbG90bHkoQWdlX0JhcilgDQpgciBBZ2VfVGFiYA0KDQojIyBMZW5ndGggb2YgU3RheSBBbmFseXNpcw0KYGBge3IgTGVuZ3RoIG9mIFN0YXksIGVjaG89RkFMU0UsIGZpZy5hbGlnbiA9ICJjZW50ZXIifQ0KI0xlbmd0aCBvZiBTdGF5IEFuYWx5c2lzDQpMT1NUYWIgPC0gRGlzY2hhcmdlICU+JQ0KICBmaWx0ZXIoZGlzY2hhcmdlRGF0ZSA+IGFzLkRhdGUoIjIwMTYvMTEvMDEiKSwNCiAgICAgICAgIGRhdGVPZkFkbWlzc2lvbiA+IGFzLkRhdGUoIjIwMTYvMTEvMDEiKSkgJT4lDQogIG11dGF0ZSgNCiAgICBNb250aCA9IG1vbnRoKHN0YXJ0VGltZSksDQogICAgWWVhciA9IHllYXIoc3RhcnRUaW1lKSwNCiAgICBMT1MgPSBhcy5udW1lcmljKGFzLkRhdGUoZGlzY2hhcmdlRGF0ZSkgLSBhcy5EYXRlKGRhdGVPZkFkbWlzc2lvbikpDQogICkgJT4lDQogIGZpbHRlcihMT1MgPj0gMCkNCg0KTE9TVGFiICU+JQ0KICBzZWxlY3QoTE9TKSAlPiUNCiAgYm94cGxvdCgNCiAgICAuLA0KICAgIG1haW4gPSBwYXN0ZSgiRGlzdHJpYnV0aW9uIG9mIExlbmd0aCBvZiBTdGF5IChMT1MpIChuID0gIiwgbnJvdyhMT1NUYWIpLCAiKSIsIHNlcCA9DQogICAgICAgICAgICAgICAgICAgIiIpLA0KICAgIHhsYWIgPSAiRGF5cyIsDQogICAgeWxhYiA9ICJMT1MiLA0KICAgIGNvbCA9ICJyZWQiLA0KICAgIGJvcmRlciA9ICJibGFjayIsDQogICAgaG9yaXpvbnRhbCA9IFRSVUUsDQogICAgbm90Y2ggPSBGQUxTRQ0KICApDQoNCkxPU1RhYiAlPiUNCiAgc2VsZWN0KExPUykgJT4lDQogIHN0cmlwY2hhcnQoDQogICAgLiwNCiAgICB4bGFiID0gIkRheXMiLA0KICAgIHlsYWIgPSAiTE9TIiwNCiAgICBtZXRob2QgPSAiaml0dGVyIiwNCiAgICBjb2wgPSAiYmxhY2siDQogICkNCmBgYA0KDQpgYGB7ciBMZW5ndGggb2YgU3RheSAyLCBlY2hvPUZBTFNFfQ0KTE9TU3VtbWFyeSA8LSBEYXRhU3VtbWFyeShMT1NUYWIkTE9TKQ0Kb3V0bGllciA8LSAgcm91bmQoMTAwICogbnJvdyhmaWx0ZXIoTE9TVGFiLCBvdXRsaWVyVGVzdChMT1MsIExPU1N1bW1hcnkpKSkgLyBucm93KExPU1RhYiksIDIpDQpgYGANCmAgYHIgb3V0bGllcmAlIGAgb2YgcGF0aWVudCdzIHdlcmUgYXNzZXNzZWQgdG8gaGF2ZSBvdXRsaWVyIGxlbmd0aCBvZiBzdGF5cy4gVGhpcyB3YXMgYXNzZXNzZWQgYnkgbWVhbnMgb2YgYSBjdXRvZmYgb2YgJDEuNSpJUVIkIGJlbG93IHRoZSBmaXJzdCBhbmQgYWJvdmUgdGhlIHRoaXJkIHF1YXJ0aWxlLg0KDQojIyMgUGF0aWVudCBsZW5ndGggb2Ygc3RheSBkZW5zaXR5IHZpc3VhbGl6YXRpb24NCg0KYGBge3IgTGVuZ3RoIG9mIFN0YXkgMywgZWNobz1GQUxTRSwgcmVzdWx0cz0iaGlkZSIsIGNhY2hlPVRSVUUsIGZpZy5hbGlnbiA9ICJjZW50ZXIifQ0KZGVuc1Bsb3QgPC0gc2VsZWN0KExPU1RhYiwgZGlzY2hhcmdlRGF0ZSwgZGF0ZU9mQWRtaXNzaW9uLCBMT1MpICU+JQ0KICBmaWx0ZXIoTE9TID49IDApICU+JQ0KICBmaWx0ZXIoIW91dGxpZXJUZXN0KExPUywgTE9TU3VtbWFyeSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBkaXNjaGFyZ2VEYXRlLCB5ID0gTE9TKSkgKyBnZW9tX2hleChiaW5zID0gMjAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICJibGFjayIpICsgc2NhbGVfZmlsbF92aXJpZGlzX2Mob3B0aW9uID0gIkQiKSArDQogIGxhYnMoeSA9ICJMZW5ndGggb2YgU3RheSIsDQogICAgICAgeCA9ICJEYXRlIiwNCiAgICAgICBmaWxsID0gIkNvdW50IikgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQoNCmlmKCFleGlzdHMoImRlbnNfd2lkZ2V0Iikpew0KICBwbG90X2dnKA0KICAgIGRlbnNQbG90LA0KICAgIG11bHRpY29yZSA9IFRSVUUsDQogICAgcmF5dHJhY2UgPSBUUlVFLA0KICAgIG9mZnNldF9lZGdlcyA9IFRSVUUsDQogICAgc2NhbGUgPSAzMDANCiAgICApDQogIHJlbmRlcl9jYW1lcmEoDQogICAgZm92ID0gNzAsDQogICAgem9vbSA9IDEuMSwNCiAgICBwaGkgPSA2MCwNCiAgICB0aGV0YSA9IDMzMA0KICAgICkNCiAgDQogIGRlbnMzZCA8LSBzY2VuZTNkKCkNCiAgcmdsLmNsb3NlKCkNCiAgZGVuc193aWRnZXQgPC0gcmdsd2lkZ2V0KGRlbnMzZCkNCn0NCg0KZGVuc1Bsb3QgPC0gc2VsZWN0KExPU1RhYiwgZGlzY2hhcmdlRGF0ZSwgZGF0ZU9mQWRtaXNzaW9uLCBMT1MpICU+JQ0KICBmaWx0ZXIoTE9TID49IDApICU+JQ0KICBmaWx0ZXIoIW91dGxpZXJUZXN0KExPUywgTE9TU3VtbWFyeSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBkaXNjaGFyZ2VEYXRlLCB5ID0gTE9TKSkgKyBnZW9tX2hleChiaW5zID0gMjAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICJibGFjayIpICsgc2NhbGVfZmlsbF92aXJpZGlzX2Mob3B0aW9uID0gIkQiKSArDQogIGxhYnModGl0bGUgPSAiTGVuZ3RoIG9mIFN0YXkgcGVyIFBhdGllbnQgd2l0aG91dCBPdXRsaWVycyIsDQogICAgICAgeSA9ICJMZW5ndGggb2YgU3RheSIsDQogICAgICAgeCA9ICJEYXRlIiwNCiAgICAgICBmaWxsID0gIkNvdW50IikgKyB0aGVtZShwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKQ0KICApDQpkZW5zX2hleCA8LSBnZ3Bsb3RseShkZW5zUGxvdCkNCg0KDQpgYGANCjNEIE1hcCAtIERyYWcgYW5kIGRvdGF0ZSB0byB2aWV3IGRldGFpbHMNCmByIGRlbnNfaGV4YA0KDQpgYGB7ciBMZW5ndGggb2YgU3RheSA0LCBlY2hvPUZBTFNFfQ0Kc3VwcHJlc3NNZXNzYWdlcygNCkxPU0FnZSA8LSBsZWZ0X2pvaW4oTE9TVGFiLCBFRCkgJT4lDQogIGZpbHRlcihMT1MgPj0gMCkgJT4lDQogIHJvd3dpc2UoKSAlPiUNCiAgbXV0YXRlKEFnZV9Hcm91cCA9IGFnZV9ncm91cHMoYWdlKSkNCikNCg0KTE9TQWdlJEFnZV9Hcm91cCA8LQ0KICBvcmRlcmVkKExPU0FnZSRBZ2VfR3JvdXAsDQogICAgICAgICAgbGV2ZWxzID0gYWdlX2xpc3QpDQoNCmdyb3VwX0xPUyA8LSBnZ3Bsb3QoTE9TQWdlLCBhZXMoeCA9IEFnZV9Hcm91cCwgeSA9IExPUykpDQoNCmdyb3VwX0xPU19Cb3ggPC0gZ3JvdXBfTE9TICsgZ2VvbV9ib3hwbG90KGZpbGwgPSAnZG9kZ2VyYmx1ZScpICsNCiAgbGFicyh0aXRsZSA9ICJMZW5ndGggb2YgU3RheSBwZXIgUGF0aWVudCBBZ2UgR3JvdXAiLA0KICAgICAgIHkgPSAiTGVuZ3RoIG9mIFN0YXkgKERheXMpIiwNCiAgICAgICB4ID0gIkFnZSBHcm91cCIpICsgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDMwKSkgKyANCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikpDQoNCmdyb3VwX0xPU19EZW5zaXR5IDwtDQogIGdyb3VwX0xPUyArIGdlb21fdmlvbGluKGZpbGwgPSAnZG9kZ2VyYmx1ZScsIHRyaW0gPSBGQUxTRSkgKyBzdGF0X3N1bW1hcnkoDQogICAgZnVuLnkgPSBtZWRpYW4sDQogICAgZ2VvbSA9ICJwb2ludCIsDQogICAgc2l6ZSA9IDEsDQogICAgY29sb3IgPSAiYmxhY2siDQogICkgKw0KICBsYWJzKHRpdGxlID0gIkxlbmd0aCBvZiBTdGF5IHBlciBQYXRpZW50IEFnZSBHcm91cCIsDQogICAgICAgeSA9ICJMZW5ndGggb2YgU3RheSAoRGF5cykiLA0KICAgICAgIHggPSAiQWdlIEdyb3VwIikgKyBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgNTApKSArIA0KICB0aGVtZShwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKSkNCg0KYWdlX0xPUyA8LSBnZ3Bsb3QoTE9TQWdlLCBhZXMoeCA9IGFnZSwgeSA9IExPUykpICsgZ2VvbV9zbW9vdGgoKSArDQogIGxhYnModGl0bGUgPSAiTGVuZ3RoIG9mIFN0YXkgdnMgUGF0aWVudCBBZ2UiLA0KICAgICAgIHkgPSAiTGVuZ3RoIG9mIFN0YXkgKERheXMpIiwNCiAgICAgICB4ID0gIkFnZSIpICsgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDEyLjUpLCB4bGltID0gYygwLCAxMDApKSArIA0KICB0aGVtZShwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKQ0KICAgICAgICApDQpgYGANCiMjIyBMZW5ndGggb2YgU3RheSBieSBBZ2UgR3JvdXANCmByIGdncGxvdGx5KGdyb3VwX0xPU19Cb3gpYA0KYHIgZ2dwbG90bHkoZ3JvdXBfTE9TX0RlbnNpdHkpYA0KYHIgZ2dwbG90bHkoYWdlX0xPUylgDQoNCmBgYHtyIElDRCwgZWNobz1GQUxTRX0NCnN1cHByZXNzTWVzc2FnZXMoDQpBZ2VJQ0QgPC0gbGVmdF9qb2luKHggPSBMT1NBZ2UsIHkgPSBEaWFnbm9zaXMpICU+JQ0KICBsZWZ0X2pvaW4oeCA9IC4sIHkgPSBJQ0QpICU+JQ0KICBsZWZ0X2pvaW4oeCA9IC4sIHkgPSBJQ0RCbG9jaykgJT4lDQogIGxlZnRfam9pbih4ID0gLiwgeSA9IElDRENoYXApDQopDQoNCkFnZUlDRCRJQ0RfQ2hhcHRlcl9TaG9ydCA8LQ0KICBvcmRlcmVkKEFnZUlDRCRJQ0RfQ2hhcHRlcl9TaG9ydCwgbGV2ZWxzID0gSUNEQ2hhcCRJQ0RfQ2hhcHRlcl9TaG9ydCkNCg0KQ2hhcF9DSSA8LSBNdWx0aV9DSShBZ2VJQ0QkSUNEX0NoYXB0ZXJfU2hvcnQpICU+JQ0KICByZW5hbWUoIklDRCBDaGFwdGVyIiA9IEZpZWxkcykNCkNoYXBfVGFiIDwtIGZvcm1hdHRhYmxlKA0KICBDaGFwX0NJLA0KICBhbGlnbiA9IGMoImwiLCByZXAoInIiLCBOQ09MKENoYXBfQ0kpIC0gMSkpLA0KICBsaXN0KA0KICAgICJJQ0QgQ2hhcHRlciIgPSBmb3JtYXR0ZXIoInNwYW4iLCBzdHlsZSA9IH4gc3R5bGUoDQogICAgICBjb2xvciA9ICJHcmV5IiwgZm9udC53ZWlnaHQgPSAiYm9sZCINCiAgICApKSwNCiAgICAiUGVyY2VudGFnZSAoJSkiID0gY29sb3JfdGlsZShncmVlbl9taW4sIGdyZWVuX21heCkNCiAgKQ0KKQ0KDQojRnVsbCBJQ0QgQ2hhcHRlciBCcmVha2Rvd24NCkZ1bGxfSUNEX0hpc3RvIDwtDQogIGdncGxvdChBZ2VJQ0QsIGFlcyh4ID0gSUNEX0NoYXB0ZXJfU2hvcnQpKSArIGdlb21fYmFyKGZpbGwgPSAncmVkJykgKyBnZW9tX3RleHQoDQogICAgc3RhdCA9ICdjb3VudCcsDQogICAgYWVzKGxhYmVsID0gLi5jb3VudC4uKSwNCiAgICB2anVzdCA9IC0wLjMsDQogICAgc2l6ZSA9IDMuNQ0KICApICsNCiAgbGFicygNCiAgICB0aXRsZSA9IHBhc3RlKCJJQ0QgQ2hhcHRlciBCcmVha2Rvd24gKG4gPSAiLCBucm93KEFnZUlDRCksICIpIiwgc2VwID0gIiIpLA0KICAgIHkgPSAiQ291bnQiLA0KICAgIHggPSAiSUNEIENoYXB0ZXIiDQogICkgKyB0aGVtZSgNCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpLA0KICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpDQogICkNCg0KRnVsbF9JQ0RfQ2hhcCA8LSBnZ3Bsb3QoQWdlSUNELCBhZXMoDQogIHggPSBJQ0RfQ2hhcHRlcl9TaG9ydCwNCiAgeSA9IExPUw0KKSkNCg0KRnVsbF9JQ0RfQm94IDwtIEZ1bGxfSUNEX0NoYXAgKyBnZW9tX2JveHBsb3QoZmlsbCA9ICdkb2RnZXJibHVlJykgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIkxlbmd0aCBvZiBTdGF5IHBlciBJQ0QgQ2hhcHRlciIsDQogICAgc3VidGl0bGUgPSAiQXJyYW5nZWQgYnkgbWVkaWFuIiwNCiAgICB5ID0gIkxlbmd0aCBvZiBTdGF5IChEYXlzKSIsDQogICAgeCA9ICJJQ0QgQ2hhcHRlciINCiAgKSArIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCA0MCkpICsgdGhlbWUoDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSwNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKQ0KICApDQoNCkZ1bGxfSUNEX0RlbnNpdHkgPC0NCiAgRnVsbF9JQ0RfQ2hhcCAgKyBnZW9tX3Zpb2xpbihmaWxsID0gJ2RvZGdlcmJsdWUnLCB0cmltID0gRkFMU0UpICsgc3RhdF9zdW1tYXJ5KA0KICAgIGZ1bi55ID0gbWVkaWFuLA0KICAgIGdlb20gPSAicG9pbnQiLA0KICAgIHNpemUgPSAxLA0KICAgIGNvbG9yID0gImJsYWNrIg0KICApICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJMZW5ndGggb2YgU3RheSBwZXIgSUNEIENoYXB0ZXIiLA0KICAgIHN1YnRpdGxlID0gIkFycmFuZ2VkIGJ5IG1lZGlhbiIsDQogICAgeSA9ICJMZW5ndGggb2YgU3RheSAoRGF5cykiLA0KICAgIHggPSAiSUNEIENoYXB0ZXIiDQogICkgKyBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgNDApKSArIHRoZW1lKA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikNCiAgKQ0KDQojVG9wIFRlbiBCcmVha2Rvd24NCnRvcF90ZW5fQ2hhcCA8LSBBZ2VJQ0QgJT4lDQogIHNlbGVjdChJQ0RfQ2hhcHRlcl9TaG9ydCkgJT4lDQogIHRhYmxlKCkgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgYXJyYW5nZShkZXNjKEZyZXEpKSAlPiUNCiAgdG9wX24oLiwgMTAsIEZyZXEpICU+JQ0KICBzZWxlY3QoIi4iKQ0KDQp0b3BfdGVuX0FnZUlDRCA8LSBBZ2VJQ0QgJT4lDQogIHJvd3dpc2UoKSAlPiUNCiAgZmlsdGVyKElDRF9DaGFwdGVyX1Nob3J0ICVpbiUgdG9wX3Rlbl9DaGFwJC4pDQoNClRvcF9DaGFwX0JhciA8LQ0KICBnZ3Bsb3QodG9wX3Rlbl9BZ2VJQ0QsIGFlcyh4ID0gZmN0X3Jlb3JkZXIoSUNEX0NoYXB0ZXJfU2hvcnQsIExPUywgLmZ1biA9IG1lZGlhbiwgLmRlc2MgPSBUUlVFKSkpICsgZ2VvbV9iYXIoZmlsbCA9ICdyZWQnKSArIGdlb21fdGV4dCgNCiAgICBzdGF0ID0gJ2NvdW50JywNCiAgICBhZXMobGFiZWwgPSAuLmNvdW50Li4pLA0KICAgIHZqdXN0ID0gLTAuMywNCiAgICBzaXplID0gMy41DQogICkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gcGFzdGUoDQogICAgICAiVG9wIDEwIElDRCBDaGFwdGVyIEJyZWFrZG93biAobiA9ICIsDQogICAgICBucm93KHRvcF90ZW5fQWdlSUNEKSwNCiAgICAgICIpIiwNCiAgICAgIHNlcCA9ICIiDQogICAgKSwNCiAgICB5ID0gIkNvdW50IiwNCiAgICB4ID0gIklDRCBDaGFwdGVyIg0KICApICsgdGhlbWUoDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSwNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKQ0KICApDQoNClRvcF9JQ0RQbG90IDwtDQogIGdncGxvdCh0b3BfdGVuX0FnZUlDRCwgYWVzKA0KICAgIHggPSBmY3RfcmVvcmRlcihJQ0RfQ2hhcHRlcl9TaG9ydCwgTE9TLCAuZnVuID0gbWVkaWFuLCAuZGVzYyA9IFRSVUUpLA0KICAgIHkgPSBMT1MNCiAgKSkNCg0KVG9wX0lDRF9Cb3ggPC0gVG9wX0lDRFBsb3QgKyBnZW9tX2JveHBsb3QoZmlsbCA9ICdkb2RnZXJibHVlJykgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIkxlbmd0aCBvZiBzdGF5IHBlciBJQ0QgY2hhcHRlciIsDQogICAgc3VidGl0bGUgPSAiQm94cGxvdHMgb2YgdGhlIDEwIG1vc3QgY29tbW9uIGNoYXB0ZXJzIGFycmFuZ2VkIGJ5IG1lZGlhbiIsDQogICAgeSA9ICJMZW5ndGggb2Ygc3RheSAoRGF5cykiLA0KICAgIHggPSAiSUNEIGNoYXB0ZXIiDQogICkgKyBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgNDApKSArIHRoZW1lKA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikNCiAgKQ0KDQpUb3BfSUNEX1Zpb2xpbiA8LQ0KICBUb3BfSUNEUGxvdCArIGdlb21fdmlvbGluKGZpbGwgPSAnZG9kZ2VyYmx1ZScsIHRyaW0gPSBGQUxTRSkgKyBzdGF0X3N1bW1hcnkoDQogICAgZnVuLnkgPSBtZWRpYW4sDQogICAgZ2VvbSA9ICJwb2ludCIsDQogICAgc2l6ZSA9IDIsDQogICAgY29sb3IgPSAiYmxhY2siDQogICkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIkxlbmd0aCBvZiBzdGF5IHBlciBJQ0QgY2hhcHRlciIsDQogICAgc3VidGl0bGUgPSAiRGVuc2l0eSBwbG90cyBvZiB0aGUgMTAgbW9zdCBjb21tb24gY2hhcHRlcnMgYXJyYW5nZWQgYnkgbWVkaWFuIiwNCiAgICB5ID0gIkxlbmd0aCBvZiBzdGF5IChEYXlzKSIsDQogICAgeCA9ICJJQ0QgY2hhcHRlciINCiAgKSArIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCA0MCkpICsgdGhlbWUoDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSwNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKQ0KICApDQpgYGANCg0KIyMgSUNEIEFuYWx5c2lzDQpgciBDaGFwX1RhYmANCg0KIyMjIEZ1bGwgRGF0YXNldA0KYHIgZ2dwbG90bHkoRnVsbF9JQ0RfSGlzdG8pYA0KYHIgZ2dwbG90bHkoRnVsbF9JQ0RfQm94KWANCmByIGdncGxvdGx5KEZ1bGxfSUNEX0RlbnNpdHkpYA0KDQojIyMgVG9wIFRlbiBDb2Rlcw0KYHIgZ2dwbG90bHkoVG9wX0NoYXBfQmFyKWANCmByIGdncGxvdGx5KFRvcF9JQ0RfQm94KWANCmByIGdncGxvdGx5KFRvcF9JQ0RfVmlvbGluKWANCg0KIyMjIERlbW9ncmFwaGljIElDRCBGbG93DQpgYGB7ciBJQ0QyLCBlY2hvPUZBTFNFfQ0KTWVyZ2VkTW9kIDwtIA0KICBNZXJnZWRJQ0QgJT4lDQogIHJvd3dpc2UoKSAlPiUNCiAgbXV0YXRlKEFnZV9Hcm91cCA9IGFnZV9ncm91cHMoYWdlKSkgJT4lDQogIGZpbHRlcihnZW5kZXIgIT0gIk90aGVyIikgJT4lDQogIHVuZ3JvdXAoKSAlPiUNCiAgZ3JvdXBfYnkoZ2VuZGVyLCBldGhuaWNpdHksIEFnZV9Hcm91cCwgSUNEX1RpdGxlKSAlPiUNCiAgY291bnQoKQ0KDQpNZXJnZWRNb2QkQWdlX0dyb3VwIDwtDQogIG9yZGVyZWQoTWVyZ2VkTW9kJEFnZV9Hcm91cCwNCiAgICAgICAgICBsZXZlbHMgPSBhZ2VfbGlzdCkNCg0KQWxsdXZfQ29kZSA8LSBNZXJnZWRNb2QgJT4lDQogIGZpbHRlcihuID4gMTAwKSAlPiUNCiAgZ2dwbG90KGFlcygNCiAgICBheGlzMSA9IGdlbmRlciwNCiAgICBheGlzMiA9IEFnZV9Hcm91cCwNCiAgICBheGlzMyA9IElDRF9UaXRsZSwNCiAgICB5ID0gbg0KICApKSArIGdlb21fYWxsdXZpdW0oYWVzKGZpbGwgPSBnZW5kZXIsIGNvbG91ciA9IGdlbmRlcikpICsgZ2VvbV9zdHJhdHVtKCkgKw0KICBnZW9tX3RleHQoDQogICAgc3RhdCA9ICJzdHJhdHVtIiwNCiAgICBsYWJlbC5zdHJhdGEgPSBUUlVFLA0KICAgIHNpemUgPSAzLA0KICAgIGxhYmVsID0gYygNCiAgICAgICJNYWxlIiwNCiAgICAgICJGZW1hbGUiLA0KICAgICAgIkFnZWQiLA0KICAgICAgIk1pZGRsZSBBZ2VkIiwNCiAgICAgICJBZHVsdCIsDQogICAgICAiQWRvbGVzY2VudCIsDQogICAgICAiU2tpbiAmIFN1YmN1dCBJbmZlY3Rpb25zIiwNCiAgICAgICJHYWxsYmxhZGRlcixcbkJpbGlhcnkgVHJhY3RcbiYgUGFuY3JlYXMiLA0KICAgICAgIk90aGVyIEludGVzdGluYWwiLA0KICAgICAgIkhlcm5pYSIsDQogICAgICAiQXBwZW5kaXgiLA0KICAgICAgIk9lc29waGFndXMsXG5TdG9tYWNoICYgRGVvZGVudW0iLA0KICAgICAgIkJyZWFzdCBOZW9wbGFzbSIsDQogICAgICAiRGlnZXN0aXZlXG5OZW9wbGFzbSIsDQogICAgICAiTi9BIg0KICAgICkNCiAgKSArDQogIHNjYWxlX3hfZGlzY3JldGUobGltaXRzID0gYygiU2V4IiwgIkFnZSBHcm91cCIsICJJQ0QgQmxvY2siKSwNCiAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAuMSwgMC4xKSkgKyB0aGVtZV9taW5pbWFsKCkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIikpICsNCiAgbGFicygNCiAgICB0aXRsZSA9IHBhc3RlKCJHZW5lcmFsIElDRDEwIENvZGUgQnJlYWtkb3duIChuPSIsIG5yb3coRUQpLCAiKSIsIHNlcCA9ICIiKSwNCiAgICBzdWJ0aXRsZSA9ICJTdHJhdGlmaWVkIGJ5IFNleCwgQWdlIEdyb3VwICYgSUNEIENvZGUiLA0KICAgIHkgPSAiRnJlcXVlbmN5Ig0KICApDQoNCk1lcmdlZE1vZDIgPC0NCiAgTWVyZ2VkSUNEICU+JSAjR2VuZXJhdGVzIE1lcmdlZCBMaXN0IG9mIFBhdGllbnRzIG9uIFNleCwgQWdlIEdyb3VwICYgSUNEIENoYXB0ZXINCiAgcm93d2lzZSgpICU+JQ0KICBtdXRhdGUoQWdlX0dyb3VwID0gYWdlX2dyb3VwcyhhZ2UpKSAlPiUNCiAgZmlsdGVyKGdlbmRlciAhPSAiT3RoZXIiKSAlPiUNCiAgdW5ncm91cCgpICU+JQ0KICBncm91cF9ieShnZW5kZXIsIGV0aG5pY2l0eSwgQWdlX0dyb3VwLCBJQ0RfQ2hhcHRlcikgJT4lDQogIGNvdW50KCkNCg0KTWVyZ2VkTW9kMiRBZ2VfR3JvdXAgPC0NCiAgb3JkZXJlZCgNCiAgICBNZXJnZWRNb2QyJEFnZV9Hcm91cCwNCiAgICBsZXZlbHMgPSBhZ2VfbGlzdA0KICApDQoNCkFsbHV2X0NoYXAgPC0gTWVyZ2VkTW9kMiAlPiUNCiAgZmlsdGVyKG4gPiAxMDApICU+JQ0KICBnZ3Bsb3QoYWVzKA0KICAgIGF4aXMxID0gZ2VuZGVyLA0KICAgIGF4aXMyID0gQWdlX0dyb3VwLA0KICAgIGF4aXMzID0gSUNEX0NoYXB0ZXIsDQogICAgeSA9IG4NCiAgKSkgKyBnZW9tX2FsbHV2aXVtKGFlcyhmaWxsID0gZ2VuZGVyLCBjb2xvdXIgPSBnZW5kZXIpKSArIGdlb21fc3RyYXR1bSgpICsNCiAgZ2VvbV90ZXh0KA0KICAgIHN0YXQgPSAic3RyYXR1bSIsDQogICAgbGFiZWwuc3RyYXRhID0gVFJVRSwNCiAgICBzaXplID0gNCwNCiAgICBsYWJlbCA9IGMoDQogICAgICAiTWFsZSIsDQogICAgICAiRmVtYWxlIiwNCiAgICAgICJBZ2VkIiwNCiAgICAgICJNaWRkbGUgQWdlZCIsDQogICAgICAiQWR1bHQiLA0KICAgICAgIllvdW5nIEFkdWx0IiwNCiAgICAgICJBZG9sZXNjZW50IiwNCiAgICAgICJHZW5pdG91cmluYXJ5IFN5c3RlbSIsDQogICAgICAiU2tpbiAmIFN1YmN1dCBUaXNzdWUiLA0KICAgICAgIkRpZ2VzdGl2ZSBTeXN0ZW0iLA0KICAgICAgIkNpcmN1bGF0b3J5IFN5c3RlbSIsDQogICAgICAiTmVvcGxhc21zIiwNCiAgICAgICJOL0EiDQogICAgKQ0KICApICsNCiAgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHMgPSBjKCJTZXgiLCAiQWdlIEdyb3VwIiwgIklDRCBDaGFwdGVyIiksDQogICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLjEsIDAuMSkpICsgdGhlbWVfbWluaW1hbCgpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSBwYXN0ZSgiR2VuZXJhbCBJQ0QxMCBDaGFwdGVyIEJyZWFrZG93biAobj0iLCBucm93KEVEKSwgIikiLCBzZXAgPSAiIiksDQogICAgc3VidGl0bGUgPSAiU3RyYXRpZmllZCBieSBTZXgsIEFnZSBHcm91cCAmIElDRCBDaGFwdGVyIiwNCiAgICB5ID0gIkZyZXF1ZW5jeSINCiAgKQ0KYGBgDQoNCiMjIyMgSUNEIENoYXB0ZXIgU2Fua2V5IEZsb3cNCmBgYHtyIElDRDIgLSBBbGx1djEsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQgPSAxMCwgZmlnLndpZHRoID0gMTV9DQpBbGx1dl9DaGFwDQpgYGANCg0KIyMjIyBJQ0QgQ29kZSBTYW5rZXkgRmxvdw0KYGBge3IgSUNEMiAtIEFsbHV2MiwgZWNobz1GQUxTRSwgZmlnLmhlaWdodCA9IDEwLCBmaWcud2lkdGggPSAxNX0NCkFsbHV2X0NvZGUNCmBgYA0KDQoNCg0K